{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "nbsphinx": "hidden"
   },
   "source": [
    "# Digital Signal Processing\n",
    "\n",
    "This collection of [jupyter](https://jupyter.org/) notebooks introduces various topics of [Digital Signal Processing](https://en.wikipedia.org/wiki/Digital_signal_processing). The theory is accompanied by computational examples written in [IPython 3](http://ipython.org/). The notebooks constitute the lecture notes to the masters course Digital Signal Processing read by Sascha Spors, Institute of Communications Engineering, Universität Rostock. The sources of the notebooks, as well as installation and usage instructions can be found on [GitHub](https://github.com/spatialaudio/digital-signal-processing-lecture)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "nbsphinx-toctree": {
     "maxdepth": 3,
     "numbered": true
    }
   },
   "source": [
    "# 1. Introduction"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "nbsphinx-toctree": {
     "maxdepth": 3,
     "numbered": true
    }
   },
   "source": [
    "* [Introduction](introduction/introduction.ipynb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2. Spectral Analysis of Deterministic Signals"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "nbsphinx-toctree": {
     "maxdepth": 3,
     "numbered": true
    }
   },
   "source": [
    "* [The Leakage-Effect](spectral_analysis_deterministic_signals/leakage_effect.ipynb)\n",
    "* [Window Functions](spectral_analysis_deterministic_signals/window_functions.ipynb)\n",
    "* [Zero-Padding](spectral_analysis_deterministic_signals/zero_padding.ipynb)\n",
    "* [Short-Time Fourier Transform](spectral_analysis_deterministic_signals/stft.ipynb)\n",
    "* [Summary](spectral_analysis_deterministic_signals/summary.ipynb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 3. Random Signals"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "nbsphinx-toctree": {
     "maxdepth": 3,
     "numbered": true
    }
   },
   "source": [
    "* [Introduction](random_signals/introduction.ipynb)\n",
    "* [Amplitude Distributions](random_signals/distributions.ipynb)\n",
    "* [Ensemble Averages](random_signals/ensemble_averages.ipynb)\n",
    "* [Stationary and Ergodic Processes](random_signals/stationary_ergodic.ipynb)\n",
    "* [Correlation Functions](random_signals/correlation_functions.ipynb)\n",
    "* [Power Spectral Densities](random_signals/power_spectral_densities.ipynb)\n",
    "* [Independent Processes](random_signals/independent.ipynb)\n",
    "* [Important Amplitude Distributions](random_signals/important_distributions.ipynb)\n",
    "* [White Noise](random_signals/white_noise.ipynb)\n",
    "* [Superposition of Random Signals](random_signals/superposition.ipynb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 4. Random Signals and LTI Systems"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "nbsphinx-toctree": {
     "maxdepth": 3,
     "numbered": true
    }
   },
   "source": [
    "* [Introduction](random_signals_LTI_systems/introduction.ipynb)\n",
    "* [Linear Mean](random_signals_LTI_systems/linear_mean.ipynb)\n",
    "* [Correlation Functions](random_signals_LTI_systems/correlation_functions.ipynb)\n",
    "* [Example: Measurement of Acoustic Impulse Responses](random_signals_LTI_systems/acoustic_impulse_response_measurement.ipynb)\n",
    "* [Power Spectral Densities](random_signals_LTI_systems/power_spectral_densities.ipynb)\n",
    "* [Wiener Filter](random_signals_LTI_systems/wiener_filter.ipynb)\n",
    "* [Linear Prediction](random_signals_LTI_systems/linear_prediction.ipynb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 5. Spectral Estimation for Random Signals"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "nbsphinx-toctree": {
     "maxdepth": 3,
     "numbered": true
    }
   },
   "source": [
    "* [Introduction](spectral_estimation_random_signals/introduction.ipynb)\n",
    "* [Periodogram](spectral_estimation_random_signals/periodogram.ipynb)\n",
    "* [Welch-Method](spectral_estimation_random_signals/welch_method.ipynb)\n",
    "* [Parametric Methods](spectral_estimation_random_signals/parametric_methods.ipynb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 6. Quantization"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "nbsphinx-toctree": {
     "maxdepth": 3,
     "numbered": true
    }
   },
   "source": [
    "* [Introduction](quantization/introduction.ipynb)\n",
    "* [Characteristic of Linear Uniform Quantization](quantization/linear_uniform_characteristic.ipynb)\n",
    "* [Quantization Error of Linear Uniform Quantization](quantization/linear_uniform_quantization_error.ipynb)\n",
    "* [Example: Requantization of a Speech Signal](quantization/requantization_speech_signal.ipynb)\n",
    "* [Noise Shaping](quantization/noise_shaping.ipynb)\n",
    "* [Oversampling](quantization/oversampling.ipynb)\n",
    "* [Example: Non-Linear Quantization of a Speech Signal](quantization/nonlinear_quantization_speech_signal.ipynb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 7. Realization of Non-Recursive Filters"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "nbsphinx-toctree": {
     "maxdepth": 3,
     "numbered": true
    }
   },
   "source": [
    "* [Introduction](nonrecursive_filters/introduction.ipynb)\n",
    "* [Fast Convolution](nonrecursive_filters/fast_convolution.ipynb)\n",
    "* [Segmented Convolution](nonrecursive_filters/segmented_convolution.ipynb)\n",
    "* [Quantization Effects](nonrecursive_filters/quantization_effects.ipynb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 8. Realization of Recursive Filters"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "nbsphinx-toctree": {
     "maxdepth": 3,
     "numbered": true
    }
   },
   "source": [
    "* [Introduction](recursive_filters/introduction.ipynb)\n",
    "* [Direct Form Structures](recursive_filters/direct_forms.ipynb)\n",
    "* [Cascaded Structures](recursive_filters/cascaded_structures.ipynb)\n",
    "* [Quantization of Filter Coefficients](recursive_filters/quantization_of_coefficients.ipynb)\n",
    "* [Quantization of Variables and Operations](recursive_filters/quantization_of_variables.ipynb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 9. Design of Digital Filters"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "nbsphinx-toctree": {
     "maxdepth": 3,
     "numbered": true
    }
   },
   "source": [
    "* [Design of Non-Recursive Filters by the Window Method](filter_design/window_method.ipynb)\n",
    "* [Design of Non-Recursive Filters by the Frequency Sampling Method](filter_design/frequency_sampling_method.ipynb)\n",
    "* [Design of Recursive Filters by the Bilinear Transform](filter_design/bilinear_transform.ipynb)\n",
    "* [Example: Non-Recursive versus Recursive Filter](filter_design/comparison_non_recursive.ipynb)\n",
    "* [Examples: Typical IIR-Filters in Audio](filter_design/audiofilter.ipynb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "nbsphinx": "hidden"
   },
   "source": [
    "# Reference Cards\n",
    "\n",
    "* [Reference Card Discrete Signals and Systems](reference_cards/RC_discrete_signals_and_systems.pdf)\n",
    "* [Reference Card Random Signals and LTI Systems](reference_cards/RC_random_signals_and_LTI_systems.pdf)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Literature\n",
    "\n",
    "The contents base on the following literature:\n",
    "\n",
    "* Alan V. Oppenheim and Ronald W. Schafer, *Discrete-Time Signal Processing*, Pearson Prentice Hall, 2010.\n",
    "* John G. Proakis and Dimitris K. Manolakis, *Digital Signal Processing*, Pearson, 2006.\n",
    "* Athanasios Papoulis and S. Unnikrishna Pillai, *Probability, Random Variables, and Stochastic Processes*, Mcgraw-Hill, 2002.\n",
    "* Petre Stoica and Randolph Moses, *Spectral Analysis of Signals*, Prentice Hall, 2005.\n",
    "* Udo Zölzer, *Digitale Audiosignalverarbeitung*, Teubner, 2005.\n",
    "* Peter Vary, Ulrich Heute and Wolfgang Hess, *Digitale Sprachsignalverarbeitung*, Teubner, 1998.\n",
    "* Bernard Widrow and István Kollár, *Quantization Noise - Roundoff Error in Digital Computation, Signal Processing, Control, and Communications*, Cambridge University Press, 2010.\n",
    "* Simon Haykin, *Adaptive Filter Theory*, Pearson Education Limited, 2013.\n",
    "* Bernd Girod, Rudolf Rabenstein, Alexander Stenger, *Einführung in die Systemtheorie*, B.G. Teubner Verlag, 2007."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Contributors\n",
    "\n",
    "* Sascha Spors (author)\n",
    "* Frank Schultz (author, proofreading)\n",
    "* Vera Erbes (author, proofreading)\n",
    "* Matthias Geier (technical advice, code review, nbsphinx)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Copyright**\n",
    "\n",
    "The notebooks are provided as [Open Educational Resources](https://en.wikipedia.org/wiki/Open_educational_resources). Feel free to use the notebooks for your own purposes. The text is licensed under [Creative Commons Attribution 4.0](https://creativecommons.org/licenses/by/4.0/), the code of the IPython examples under the [MIT license](https://opensource.org/licenses/MIT). Please attribute the work as follows: *Sascha Spors, Digital Signal Processing - Lecture notes featuring computational examples*."
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
